// 导出
const { ObjectId } = require('mongodb');
const {
    DayPlan
} = require('../../../model/plan/dayPlan');

const xlsx = require('node-xlsx');
const fs = require('fs');

function getdate(times: any) {
    var now = new Date(times)
    let y = now.getFullYear()
    let m = now.getMonth() + 1
    let d = now.getDate()
    return y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d) + " " + now.toTimeString().substr(0, 8);
}

module.exports = async (req: any, res: any) => {
    enum status {
        '未开始' = 0,
        '进行中' = 1,
        '已完成' = 2,
        '已失效' = 3
    };

    const options = {
        '!cols': [
            { wpx: 300 },//1-变更名称
            { wpx: 100 },//2-变更描述
            { wpx: 140 },//3-计划上线测试时间
            { wpx: 140 }, //4-计划上线时间
            { wpx: 250 }, //5-子系统、模块名称
            { wpx: 120 }, //6-依赖模块
            { wpx: 195 },//7-功能点
            { wpx: 195 }, //8-详细描述
            { wpx: 195 }, //9-测试要点
            { wpx: 205 }, //10-对应需求
            { wpx: 150 }, //11-是否
            { wpx: 150 }, //12-开发A
            { wpx: 150 }, //13-开发B
            { wpx: 110 }, //14-关联版本
            { wpx: 110 }, //15-代码走查
        ],
        '!rows': [
            { hpx: 40, },
            { hpx: 60 },
            { hpx: 80 },
            { hpx: 100 },
        ],
        '!margins': { left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3 },
    }

    // const range = { s: { c: 0, r: 0 }, e: { c: 0, r: 2 } }; // A1:A4
    // options['!merges'] = [range]

    // 指定标题单元格样式：加粗居中 修改背景色
    let headerStyle = {
        font: {
            bold: true
        },
        alignment: {
            horizontal: "center"
        },
        fill: {
            fgColor: { rgb: "C0504D" },//16进制，注意要去掉#
        },
    }

    // 创建Excel文件
    //标题
    const data = [[{
        v: "id",
        s: headerStyle
    }, {
        v: "姓名",
        s: headerStyle
    }, {
        v: "手机号",
        s: headerStyle
    }, {
        v: "计划名",
        s: headerStyle
    }, {
        v: '计划分类',
        s: headerStyle
    }, {
        v: '开始时间',
        s: headerStyle
    }, {
        v: '结束时间',
        s: headerStyle
    }, {
        v: '状态',
        s: headerStyle
    }, {
        v: '创建时间',
        s: headerStyle
    }, {
        v: '备注',
        s: headerStyle
    }]]

    //内容
    let plans = await DayPlan.find().sort('-createTime');
    let list = plans.map((item: any) => {
        return {
            id: item.id,
            username: item.username,
            phone: item.phone,
            planName: item.planName,
            planType: item.planType.label,
            startTime: getdate(item.startTime),
            endTime: getdate(item.endTime),
            achieveStatus: status[item.achieveStatus],
            createTime: getdate(item.createTime),
            notes: item.notes,
        }
    })
    list.map((item: any) => {
        data.push(Object.values(item))
    })



    // 构造一个 Excel 文件对象
    const excelFile = [
        {
            name: 'sheet1',
            data: data,
        },
    ];

    // 生成 Excel 文件的二进制流数据
    const buffer = xlsx.build(excelFile, options);

    // 设置响应头
    res.setHeader(
        'Content-Type',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    );
    res.setHeader('Content-Disposition', 'attachment; filename=test.xlsx');

    // 将 Excel 文件的二进制流数据返回给客户端
    res.end(buffer, 'binary');
}